Skip to main content

Instalación y configuración inicial de pacemaker | corosync en RH10

Resumen

Este manual presenta la instalación de un clúster de Pacemaker y Corosync de dos nodos en RHEL 10 (AlmaLinux). La configuración no contará con los servicios de fencing/STONITH, únicamente se realizará la configuración más básica posible, con una IP virtual (VIP) y un servicio web Apache. Se utilizará PCS siguiendo el manual oficial

Arquitectura

image

El cluster se compondrá de dos nodos [ node1 | node2 ].

Instalación inicial

Configuración inicial de los nodos

root@node1:~# hostnamectl
Static hostname: node1
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 814d7fcf9faf4d688c112c9e9d089fb6
Boot ID: ca03f5039d9c42e38ac8c05e5bb3148e
Product UUID: eef6855a-4671-4f04-b818-f20b3977a18e
Virtualization: kvm
Operating System: AlmaLinux 10.0 (Purple Lion)
CPE OS Name: cpe:/o:almalinux:almalinux:10::baseos
OS Support End: Fri 2035-06-01
OS Support Remaining: 9y 9month 2w 3d
Kernel: Linux 6.12.0-55.24.1.el10_0.x86_64

root@node2:~# hostnamectl
Static hostname: node2
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 5d9ef93bd114429a848a07d9514150d3
Boot ID: f46b32d55404455aa6ffd91b7d989306
Product UUID: 1bd08f6f-6988-4367-998a-618a6cd7f94b
Virtualization: kvm
Operating System: AlmaLinux 10.0 (Purple Lion)
CPE OS Name: cpe:/o:almalinux:almalinux:10::baseos
OS Support End: Fri 2035-06-01
OS Support Remaining: 9y 9month 2w 3d
Kernel: Linux 6.12.0-55.24.1.el10_0.x86_64

Antes de comenzar a configurar el clúster, registrar los nombres en ambos nodos:

/etc/hosts
10.10.10.5 node1
10.10.10.6 node2

Instalación de Pacemaker

Para instalar Pacemaker es necesario activar los repositorios de alta disponibilidad. Seguir los siguientes pasos en ambos nodos:

dnf repolist --all 
dnf config-manager --set-enabled highavailability
dnf update
dnf install pacemaker pcs

Configuración del usuario hacluster

Por defecto, una vez instalado Pacemaker, genera un usuario llamado hacluster. Es necesario cambiar la contraseña de este usuario, ya que será el encargado de gestionar el clúster:

root@node1:~# getent passwd hacluster
hacluster:x:189:189:cluster user:/var/lib/pacemaker:/sbin/nologin

Para este caso, ejecutar # passwd hacluster y modificar la contraseña.

Inicio del servicio pcsd

En ambos nodos es necesario arrancar el servicio pcsd.service:

root@node1:~# systemctl start pcsd
root@node1:~# systemctl enable pcsd
root@node1:~# systemctl status pcsd
● pcsd.service - PCS GUI and remote configuration interface
Loaded: loaded (/usr/lib/systemd/system/pcsd.service; disabled; preset: disabled)
Active: active (running) since Wed 2025-08-13 18:32:42 CEST; 5s ago
Invocation: 2680a56f287740d98f8ebec76a0b8df3
Docs: man:pcsd(8)
man:pcs(8)
Main PID: 11633 (pcsd)
Tasks: 31 (limit: 47376)
Memory: 459.4M (peak: 459.8M)
CPU: 6.654s
CGroup: /system.slice/pcsd.service

Creación del Clúster

Una vez configurado, el entorno estará listo para crear el clúster y dar de alta los nodos. Primero, generar las reglas en los firewall de ambos nodos:

firewall-cmd --permanent --add-service=high-availability
firewall-cmd --reload

A partir de aquí, los comandos de PCS se realizarán solo en un nodo. Lo primero es autenticar ambos nodos con el usuario hacluster y la contraseña establecida anteriormente:

root@node1:~# pcs host auth node1 node2
Username: hacluster
Password:
node2: Authorized
node1: Authorized

Una vez autenticados, se puede crear el clúster. En este caso, se llamará al clúster megatroncluster. Después de esto, se debe arrancar de forma manual:

root@node1:~# pcs cluster setup megatroncluster node1 node2
root@node1:~# pcs cluster start --all

En caso de necesitar volver atrás se puede eliminar el cluster ejecutando # pcs cluster destroy. Una vez arrancado el cluster ya se puede ver el estado

root@node2:~# pcs cluster status
Cluster Status:
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: node1 (version 3.0.0-5.el10-7e73fd0) - partition with quorum
* Last updated: Wed Aug 13 19:03:52 2025 on node2
* Last change: Wed Aug 13 19:03:19 2025 by hacluster via hacluster on node1
* 2 nodes configured
* 0 resource instances configured
Node List:
* Online: [ node1 node2 ]

PCSD Status:
node2: Online
node1: Online

Verificación y Resolución de Errores en el Clúster

Si el clúster muestra errores con estado de nodo UNCLEAN, es necesario comprobar que el servicio pacemaker.service esté levantado. De lo contrario, PCS dará error.

Verificación del Servicio Pacemaker

# systemctl status pacemaker.service
# systemctl start pacemaker.service
# systemctl enable pacemaker.service

Configuración de Recursos en el Clúster

Deshabilitar STONITH

Dado que no se tiene instalado el agente de fencing, es necesario deshabilitar STONITH:

# pcs property set stonith-enabled=false

Crear Recurso de IP Virtual (VIP)

La IP virtual será la encargada de balancear el servicio en el nodo correcto. Los recursos se agruparán para que balanceen simultáneamente. En este caso, el grupo se llamará apachegroup:

root@node1:~# pcs resource create VirtualIP IPaddr2 ip=10.10.10.100 cidr_netmask=24 --group apachegroup
root@node1:~# pcs status
---
Full List of Resources:
* Resource Group: apachegroup:
* VirtualIP (ocf:heartbeat:IPaddr2): Started node1

Configuración del Servidor Web Apache

Instalación de Apache

Instalar Apache en ambos nodos:

dnf install -y httpd wget

Configuración del Archivo PID

Añadir la siguiente línea en /etc/httpd/conf/httpd.conf en ambos nodos:

/etc/httpd/conf/httpd.conf
PidFile /var/run/httpd/httpd.pid

Esta configuración es necesaria porque el proceso es controlado por systemd. La directiva PidFile especifica el archivo donde Apache almacena su ID de proceso principal (PID).

Configuración del Firewall

Añadir las siguientes reglas de firewall en ambos nodos:

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

Creación del Recurso Web en el Clúster

Siguiendo la guía oficial, crear el recurso de Apache:

pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apachegroup

Verificación del estado de los recursos

root@node1:~# pcs status
---
Full List of Resources:
* Resource Group: apachegroup:
* VirtualIP (ocf:heartbeat:IPaddr2): Started node1
* Website (ocf:heartbeat:apache): Started node1

Configuración y Depuración de Recursos

Verificar Configuración de Recursos

Para comprobar la configuración de los recursos individuales, utilizar los siguientes comandos:

root@node1:~# pcs resource config Website
root@node1:~# pcs resource config VirtualIP

Depuración de Recursos

En caso de problemas al iniciar los recursos, se puede utilizar el modo de depuración:

root@node1:~# pcs resource debug-start Website

Resultado Final del Clúster de Alta Disponibilidad

Acceso al Servicio Web

El servicio web estará accesible mediante la dirección IP virtual:

  • URL: http://10.10.10.100:80

image

Failover Automático

Escenario de Caída de node1

Cuando node1 se apaga, el clúster realiza automáticamente la migración de recursos:

root@node2:~# pcs status
---
Node List:
* Online: [ node2 ]
* OFFLINE: [ node1 ] <=================
Full List of Resources:
* Resource Group: apachegroup:
* VirtualIP (ocf:heartbeat:IPaddr2): Started node2
* Website (ocf:heartbeat:apache): Started node2

‍## Fuentes